const path = require('path')

/**
 * ee-bin 配置
 * 仅适用于开发环境
 */
module.exports = {
    
    /**
     * development serve ("frontend" "electron" )
     * ee-bin dev
     */
    dev: {
        // frontend：前端服务
        // 说明：该配置的意思是，进入 frontend 目录，执行 npm run dev
        // 运行后的服务为 http://localhost:8080
        // 如果 protocol 属性为 'file://' 那么不会执行命令，项目直接加载 indexPath 对应的文件。
        frontend: {
            directory: './frontend',
            cmd      : 'npm',
            args     : ['run', 'dev'],
            protocol : 'http://',
            hostname : 'localhost',
            port     : 8080,
            indexPath: 'index.html',
            force    : false,
            sync     : false
        },
        
        // electron：主进程服务
        // 说明：该配置的意思是，在根目录，执行 electron . --env=local
        electron: {
            directory  : './',
            cmd        : 'electron',
            args       : ['.', '--env=local', '--debugger=false'],
            loadingPage: '/public/html/loading.html',
            watch      : false,
            sync       : false,
            delay      : 1000
        }
    },
    
    /**
     * 构建
     * 对应命令：ee-bin build
     *
     * 说明：用来构建可执行程序、前端、主进程、go、或者自定义命令
     *
     * 可执行程序
     * 举例：ee-bin build --cmds=win64 // 构建exe
     *
     * 前端
     * 举例：ee-bin build --cmds=frontend // 构建前端 dist资源
     *
     * 主进程
     * 举例：ee-bin build --cmds=electron // 构建主进程./electron目录代码
     *
     * 自定义
     * 举例：ee-bin build --cmds=go_dev_win64  // 构建 go windows平台程序
     * 举例：ee-bin build --cmds=go_linux      // 构建 go linux平台程序
     */
    build: {
        
        // 构建 前端代码，根据实际 frontend 项目配置
        // ee-bin build --cmds=frontend
        frontend: {
            directory: './frontend',
            cmd      : 'npm',
            args     : ['run', 'build']
        },
        
        // 构建 主进程代码 ./electron
        electron: {
            type      : 'javascript',
            bundler   : 'esbuild',
            bundleType: 'bundle', // copy | bundle
            javascript: {
                entryPoints   : ['./electron/**/*.js'],
                platform      : 'node',
                bundle        : false,
                minify        : false,
                outdir        : 'public/electron',
                packages      : 'external',
                sourcemap     : false,
                sourcesContent: false
            },
            typescript: {
                entryPoints   : ['./electron/**/*.ts'],
                tsconfig      : './tsconfig.json',
                platform      : 'node',
                format        : 'cjs',
                bundle        : false,
                minify        : false,
                outdir        : 'public/electron',
                packages      : 'external',
                sourcemap     : false,
                sourcesContent: false
            }
        },
        
        // windows 32位 nsis 打包
        win32: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder.json', '-w=nsis', '--ia32']
        },
        
        // windows 64位 nsis 打包
        win64: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder.json', '-w=nsis', '--x64']
        },
        
        // windows 32位绿色版
        win32Portable: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder.json', '-w=portable', '--ia32']
        },
        
        // windows 64位绿色版
        win64Portable: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder.json', '-w=portable', '--x64']
        },
        
        // windows 32位 7z打包（压缩）
        win32Zip7: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder.json', '-w=7z', '--ia32']
        },
        
        // windows 64位 7z打包（压缩）
        win64Zip7: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder.json', '-w=7z', '--x64']
        },
        
        // Mac
        mac: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder-mac.json', '-m']
        },
        
        // Mac Arm64
        macArm64: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder-mac-arm64.json', '-m', '--arm64']
        },
        
        // Linux
        linux: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder-linux.json', '-l=deb', '--x64']
        },
        
        // Linux Arm64
        linuxArm64: {
            cmd      : 'electron-builder',
            directory: './',
            args     : ['--config=./cmd/builder-linux.json', '-l=deb', '--arm64']
        }
    },
    
    
    /**
     * 移动资源
     * 对应命令：ee-bin move
     *
     * 说明：移动前端、go、配置等静态资源到指定目录，供生产环境使用。支持文件、目录。
     *
     * 举例：ee-bin move --flag=go_static,go_config,go_package,go_images （移动 go 资源）
     */
    move: {
        frontend_dist: {
            src : './frontend/dist',
            dest: './public/dist'
        }
    },
    
    /**
     * 预发布模式（prod）
     * 对应命令：ee-bin start
     * 说明：该配置的意思是，在根目录，执行 electron . --env=prod
     */
    start: {
        directory: './',
        cmd      : 'electron',
        args     : ['.', '--env=prod']
    },
    
    /**
     * 加密
     * 对应命令：ee-bin encrypt
     * 说明：多种加密功能，支持对主进程和 前端代码的加密，保护您的源码安全。
     */
    encrypt: {
        
        // 前端
        frontend: {
            type            : 'none',
            files           : [
                './public/dist/**/*.(js|json)'
            ],
            fileExt         : ['.js'],
            cleanFiles      : ['./public/dist'],
            specificFiles   : [],
            encryptDir      : './',
            confusionOptions: {
                compact                  : true,
                stringArray              : true,
                stringArrayEncoding      : ['none'],
                deadCodeInjection        : false,
                stringArrayCallsTransform: true,
                numbersToExpressions     : true,
                target                   : 'browser'
            }
        },
        
        // 主程序
        electron: {
            type            : 'none',
            files           : [
                './public/electron/**/*.(js|json)'
            ],
            fileExt         : ['.js'],
            cleanFiles      : ['./public/electron'],
            specificFiles   : ['./public/electron/preload/bridge.js'],
            encryptDir      : './',
            confusionOptions: {
                compact                  : true,
                stringArray              : true,
                stringArrayEncoding      : ['rc4'],
                deadCodeInjection        : false,
                stringArrayCallsTransform: true,
                numbersToExpressions     : true,
                target                   : 'node'
            }
        }
    },
    
    /**
     * 执行自定义命令
     * 对应命令：ee-bin exec
     */
    exec: {}
};